package cn.itcast.service.system.impl;

import cn.itcast.dao.system.ModuleDao;
import cn.itcast.dao.system.UserDao;
import cn.itcast.domain.system.Module;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.ModuleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class ModuleServiceImpl implements ModuleService {

	@Autowired
	private ModuleDao moduleDao;

	@Autowired
	private UserDao userDao;

	//分页
	public PageInfo findAll(int page, int size) {
		PageHelper.startPage(page,size);
		List<Module> list = moduleDao.findAll();
		return new PageInfo(list);
	}

	//根据id查询
	public Module findById(String id) {
		return moduleDao.findById(id);
	}

	//查询全部
	public List findAll() {
		return moduleDao.findAll();
	}


	//保存
	public void save(Module module) {
		module.setId(UUID.randomUUID().toString());
		moduleDao.save(module);
	}

	//更新
	public void update(Module module) {
		moduleDao.update(module);
	}

	//删除
	public void delete(String id) {
		moduleDao.delete(id);
	}


	//根据角色id，查询次角色所有的模块
	public List<Module> findByRoleId(String roleId) {
		return moduleDao.findByRoleId(roleId);
	}

	//分配模块
	public void updateRoleModule(String roleId, String moduleIds) {
		//1.构造所有勾选的模块id数组
		String mids[] = moduleIds.split(",");
		//2.根据角色id，删除角色模块中间表数据
		moduleDao.deleteRoleModule(roleId);
		//3.循环所有模块数组，向角色模块中间表中保存数据
		for (String moduleId : mids) {
			moduleDao.saveRoleModule(roleId,moduleId);
		}
	}

	//根据用户id，查询可操作的所有模块
	public List<Module> findByUserId(String userId) {
		//1.根据用户id查询用户
		User user = userDao.findById(userId);
		//2.获取用户类型
		Integer degree = user.getDegree();
		//3.根据类型，发送查询
		if (degree == 0) {
			//3.1 如果degree==0（saas管理员）,查询belong=0的所有模块
			return moduleDao.findByBelong(0);
		}else if(degree == 1) {
			//3.2 如果degree==1（企业管理员）,查询belong=1的所有模块
			return moduleDao.findByBelong(1);
		}else {
			//3.3 如果degree==其他（普通员工），多表联合查询
			return moduleDao.findByUserId(userId);
		}
	}
}
